#ifndef SOCKET_H_
#define SOCKET_H_

#include <arpa/inet.h>
#include <netinet/in.h>
#include <netdb.h>
#include <unistd.h>

#include "commonConfig.h"

class ServerSocket {
private:
	int socketFd;
	unsigned int puerto;
public:
	/* Crea un nuevo socket, obteniendo un filedescriptor del sistema operativo.
	 * Recibe el numero del puerto al que se desea conectar.*/
	explicit ServerSocket(unsigned int puerto);

	/* Enlaza el socket con una dirección y un puerto. Retorna un entero que
	 * representa el codigo de error.*/
	int enlazar();

	/* Configura el socket para recibir conexiones en la dirección y
	puerto. Retorna un entero que representa el codigo de error.*/
	int escuchar();

	/* Espera una conexion en el socket previamente configurado.
	 * Retorna el filedescriptor a un nuevo socket para la conexion aceptada
	 * o -1 si ocurrio algun error. */
	int aceptar();

	/* Cierra el socket y libera los recursos.
	 * Retorna el codigo de error. */
	void cerrar();
};

#endif /* SOCKET_H_ */
